#include "Inf_WTN6170.h"

// 设置引脚
#define WTN_DATA GPIO_NUM_9
// 设置高电平
#define WTN_DATA_H gpio_set_level(WTN_DATA, 1)
// 设置低电平
#define WTN_DATA_L gpio_set_level(WTN_DATA, 0)

/**
 * @brief 初始化语音
 *
 */
void Inf_WTN6170_Init(void)
{
    gpio_config_t gpio = {};
    // 不适用中断
    gpio.intr_type = GPIO_INTR_DISABLE;
    // 输出模式
    gpio.mode = GPIO_MODE_OUTPUT;
    // 不使用上拉
    gpio.pull_up_en = GPIO_PULLUP_DISABLE;
    // 不使用下拉
    gpio.pull_down_en = GPIO_PULLDOWN_DISABLE;
    // 设置那个引脚
    gpio.pin_bit_mask = (1 << WTN_DATA);
    gpio_config(&gpio);

    // 默认高电平
    WTN_DATA_H;
}

/**
 * @brief 播放语音
 *
 * @param cmd 命令
 */
void Inf_WTN6170_Play(uint8_t cmd)
{
    // 拉低10ms
    WTN_DATA_L;
    vTaskDelay(10);

    // 发送命令
    for (uint8_t i = 0; i < 8; i++)
    {
        /* code */
        if ((cmd & 0X01))
        {
            WTN_DATA_H;
            esp_rom_delay_us(600);
            WTN_DATA_L;
            esp_rom_delay_us(200);
        }
        else
        {
            WTN_DATA_H;
            esp_rom_delay_us(200);
            WTN_DATA_L;
            esp_rom_delay_us(600);
        }
        cmd >>= 1;
    }
    WTN_DATA_H;
    vTaskDelay(10);
}
